/**
 * 数据处理辅助类
 */

/**
 * 对象过滤，只保留指定字段
 * @param {Object} obj 对象
 * @param {Array} fields 字段数组
 */
function filterFields(obj, fields) {
    if (!obj || !fields || !Array.isArray(fields)) return {};
    
    const result = {};
    fields.forEach(field => {
        if (obj.hasOwnProperty(field)) {
            result[field] = obj[field];
        }
    });
    
    return result;
}

/**
 * 对象过滤，去除指定字段
 * @param {Object} obj 对象
 * @param {Array} fields 字段数组
 */
function removeFields(obj, fields) {
    if (!obj || !fields || !Array.isArray(fields)) return obj;
    
    const result = {};
    for (let key in obj) {
        if (obj.hasOwnProperty(key) && !fields.includes(key)) {
            result[key] = obj[key];
        }
    }
    
    return result;
}

/**
 * 数组去重
 * @param {Array} arr 数组
 * @param {String} key 如果是对象数组，则按指定key去重
 */
function uniqueArray(arr, key) {
    if (!arr || !Array.isArray(arr)) return [];
    
    if (!key) {
        return [...new Set(arr)];
    }
    
    const map = new Map();
    return arr.filter(item => {
        if (!item || typeof item !== 'object') return false;
        
        const val = item[key];
        if (!val) return false;
        
        if (map.has(val)) {
            return false;
        } else {
            map.set(val, true);
            return true;
        }
    });
}

module.exports = {
    filterFields,
    removeFields,
    uniqueArray
}; 